package com.chenjiaru.io.test;

import java.io.*;

/**
 * 2.用于测试（快捷使用）
 * 字符流操作
 *      1、适合操作文本文件也可以，不能操作二进制文件（会出问题）
 */
public class FileReaderDemo {

    public static void main(String [] arr) {
        copyBufferedReader("C:\\Users\\Administrator\\Desktop\\bd\\基础数据\\压测\\模拟百度压测bxkc-pc项目\\jmeterFile\\nginx请求日志\\ip_2023-04-10.log",
                "C:\\Users\\Administrator\\Desktop\\bd\\基础数据\\压测\\模拟百度压测bxkc-pc项目\\jmeterFile\\nginx请求日志\\ip_2023-04-10-baidu-clsbzb.log");
        System.out.println("操作完成...");
    }


    /**
     * 处理流 BufferedReader（FileReader） BufferedWriter（FileWriter）
     *      1.只要关处理流就可以了，他会自动关对应的节点流
     *      2.处理流和节点流的方法基本一致，也多了newLine()readLine()读取一行的函数，但是内部实现了缓冲，提高了性能
     * @param src       原路径
     * @param desc      目标路径
     */
    public static void copyBufferedReader(String src, String desc) {
        FileReader fr = null;
        BufferedReader br = null;
        FileWriter fw = null;
        BufferedWriter bw = null;
        try {
            fr = new FileReader(src);
            br = new BufferedReader(fr);

            fw = new FileWriter(desc);
            bw = new BufferedWriter(fw);

            // 116.179|220.181|113.24
            String str = null;
            while ((str = br.readLine()) != null) {
                if (!(str.startsWith("116.179") || str.startsWith("220.181") || str.startsWith("113.24"))) {
                    continue;
                }


                int start = str.indexOf("] \"GET /");
                int end = str.indexOf(" HTTP/1.1\"");
                if (start == -1 || end == -1) {
                    continue;
                }
                start = start + "] \"GET /".length() - 1;


                String temp = str.substring(start, end);
                if (temp.contains("clsbzb")) {
                    bw.write(temp);
                    bw.newLine();
                }
            }
            // 最后一次，需要刷新此缓冲的输出流，保证数据全部都能写出
            bw.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(br);
            close(bw);
        }
    }



    /**
     * 关闭输入流
     * @param fileReader
     */
    public static void close(Reader fileReader) {
        if (fileReader != null) {
            try {
                fileReader.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 关闭流OutStream
     * @param fileWriter
     */
    public static void close(Writer fileWriter) {
        if (fileWriter != null) {
            try {
                fileWriter.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }



}
